/* eslint valid-jsdoc: "off" */

'use strict';

/**
 * @param {Egg.EggAppInfo} appInfo app info
 */
module.exports = appInfo => {
  /**
   * built-in config
   * @type {Egg.EggAppConfig}
   **/
  const config = exports = {};

  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_1634887993852_1491';

  // 加载 errorHandler 中间件
  config.middleware = [ 'errorHandler' ];
  // 只对 /* 前缀的 url 路径生效
  config.errorHandler = {
    match: '/*',
  };

  // add your user config here
  const userConfig = {
    // myAppName: 'egg',
  };

  config.jwt = {
    secret: 'wmt123456', // 自定义 token 的加密条件字符串
  };

  // 跨域设置
  config.security = {
    csrf: {
      enable: false,
    },
    domainWhiteList: [ '*' ],
  };

  config.cors = {
    origin: '*',
    allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS',
  };


  config.validate = {
    convert: true, // 对参数可以使用 convertType 规则进行类型转换
    // validateRoot: false, // 限制被验证值必须是一个对象
    widelyUndefined: true,
  };

  config.swaggerdoc = {
    dirScanner: './app/controller', // 插件扫描的文档路径
    apiInfo: {
      title: 'swagger文档',
      description: 'egg.js swagger-demo文档',
      version: '1.0.0',
    },
    consumes: [ 'application/json', 'multipart/form-data' ], // 指定处理请求的提交内容类型（Content-Type），例如application/json, text/html
    produces: [ 'application/json', 'multipart/form-data' ], // 指定返回的内容类型，仅当request请求头中的(Accept)类型中包含该指定类型才返回
    schemes: [ 'http', 'https' ],
    securityDefinitions: {
      apikey: {
        type: 'apiKey',
        name: 'Authorization', // jwt一般是这名字，根据需要调整
        in: 'header',
      },
    },
    enableSecurity: true,
    routerMap: true, // 是否自动生成route
    enable: true,
  };

  return {
    ...config,
    ...userConfig,
  };
};
